
<!DOCTYPE html>
<html lang="en" class="loading">
<head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
    <meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
    <title>13_文件 - fubaisen</title>
    <meta name="apple-mobile-web-app-capable" content="yes" />
    <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
    <meta name="google" content="notranslate" />
    <meta name="keywords" content="Fechin,"> 
    <meta name="description" content="文件目标
文件的概念
文件的基本操作
文件&amp;#x2F;文件夹的常用操作
文本文件的编码方式

01. 文件的概念1.1 文件的概念和作用
计算机的 文件，就是存储在某种 长期储存设备 上的一段 数据,"> 
    <meta name="author" content="John Doe"> 
    <link rel="alternative" href="atom.xml" title="fubaisen" type="application/atom+xml"> 
    <link rel="icon" href="/img/favicon.png"> 
    
    
    
    <meta name="twitter:card" content="summary"/>
    <meta name="twitter:title" content="13_文件 - fubaisen"/>
    <meta name="twitter:description" content="文件目标
文件的概念
文件的基本操作
文件&amp;#x2F;文件夹的常用操作
文本文件的编码方式

01. 文件的概念1.1 文件的概念和作用
计算机的 文件，就是存储在某种 长期储存设备 上的一段 数据,"/>
    
    
    
    
    <meta property="og:site_name" content="fubaisen"/>
    <meta property="og:type" content="object"/>
    <meta property="og:title" content="13_文件 - fubaisen"/>
    <meta property="og:description" content="文件目标
文件的概念
文件的基本操作
文件&amp;#x2F;文件夹的常用操作
文本文件的编码方式

01. 文件的概念1.1 文件的概念和作用
计算机的 文件，就是存储在某种 长期储存设备 上的一段 数据,"/>
    
<link rel="stylesheet" href="/css/diaspora.css">

    <script>window.searchDbPath = "/search.xml";</script>
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Source+Code+Pro&display=swap" rel="stylesheet">
<meta name="generator" content="Hexo 6.3.0"></head>

<body class="loading">
    <span id="config-title" style="display:none">fubaisen</span>
    <div id="loader"></div>
    <div id="single">
    <div id="top" style="display: block;">
    <div class="bar" style="width: 0;"></div>
    <a class="iconfont icon-home image-icon" href="javascript:;" data-url="http://fubaisen.github.io"></a>
    <div title="播放/暂停" class="iconfont icon-play"></div>
    <h3 class="subtitle">13_文件</h3>
    <div class="social">
        <div>
            <div class="share">
                <a title="获取二维码" class="iconfont icon-scan" href="javascript:;"></a>
            </div>
            <div id="qr"></div>
        </div>
    </div>
    <div class="scrollbar"></div>
</div>

    <div class="section">
        <div class="article">
    <div class='main'>
        <h1 class="title">13_文件</h1>
        <div class="stuff">
            <span>三月 28, 2022</span>
            
  <ul class="post-tags-list" itemprop="keywords"><li class="post-tags-list-item"><a class="post-tags-list-link" href="/tags/python%E5%AD%A6%E4%B9%A0/" rel="tag">python学习</a></li></ul>


        </div>
        <div class="content markdown">
            <h1 id="文件"><a href="#文件" class="headerlink" title="文件"></a>文件</h1><h2 id="目标"><a href="#目标" class="headerlink" title="目标"></a>目标</h2><ul>
<li>文件的概念</li>
<li>文件的基本操作</li>
<li>文件&#x2F;文件夹的常用操作</li>
<li>文本文件的编码方式</li>
</ul>
<h2 id="01-文件的概念"><a href="#01-文件的概念" class="headerlink" title="01. 文件的概念"></a>01. 文件的概念</h2><h3 id="1-1-文件的概念和作用"><a href="#1-1-文件的概念和作用" class="headerlink" title="1.1 文件的概念和作用"></a>1.1 文件的概念和作用</h3><ul>
<li>计算机的 <strong>文件</strong>，就是存储在某种 <strong>长期储存设备</strong> 上的一段 <strong>数据</strong></li>
<li>长期存储设备包括：硬盘、U 盘、移动硬盘、光盘…</li>
</ul>
<p><strong>文件的作用</strong></p>
<p>将数据长期保存下来，在需要的时候使用</p>
<table>
<thead>
<tr>
<th align="center">CPU</th>
<th align="center">内存</th>
<th align="center">硬盘</th>
</tr>
</thead>
<tbody><tr>
<td align="center"><img src="https://s2.loli.net/2022/03/20/mPfM1KdjHq7pIW5.jpg" alt="CPU"  /></td>
<td align="center"><img src="/13_%E6%96%87%E4%BB%B6.assets/Ib9nYEGt2CsUpJ8.png" alt="内存条"></td>
<td align="center"><img src="https://s2.loli.net/2022/03/20/YGQUEsSxRftKba5.jpg" alt="硬盘"></td>
</tr>
</tbody></table>
<h3 id="1-2-文件的存储方式"><a href="#1-2-文件的存储方式" class="headerlink" title="1.2 文件的存储方式"></a>1.2 文件的存储方式</h3><ul>
<li>在计算机中，文件是以 <strong>二进制</strong> 的方式保存在磁盘上的</li>
</ul>
<h4 id="文本文件和二进制文件"><a href="#文本文件和二进制文件" class="headerlink" title="文本文件和二进制文件"></a>文本文件和二进制文件</h4><ul>
<li>文本文件<ul>
<li>可以使用 <strong>文本编辑软件</strong> 查看</li>
<li>本质上还是二进制文件</li>
<li>例如：python 的源程序</li>
</ul>
</li>
<li>二进制文件<ul>
<li>保存的内容 不是给人直接阅读的，而是 <strong>提供给其他软件使用的</strong></li>
<li>例如：图片文件、音频文件、视频文件等等</li>
<li>二进制文件不能使用 <strong>文本编辑软件</strong> 查看</li>
</ul>
</li>
</ul>
<h2 id="02-文件的基本操作"><a href="#02-文件的基本操作" class="headerlink" title="02. 文件的基本操作"></a>02. 文件的基本操作</h2><h3 id="2-1-操作文件的套路"><a href="#2-1-操作文件的套路" class="headerlink" title="2.1 操作文件的套路"></a>2.1 操作文件的套路</h3><p>在 <strong>计算机</strong> 中要操作文件的套路非常固定，一共包含<strong>三个步骤</strong>：</p>
<ol>
<li>打开文件</li>
<li>读、写文件<ul>
<li><strong>读</strong> 将文件内容读入内存</li>
<li><strong>写</strong> 将内存内容写入文件</li>
</ul>
</li>
<li>关闭文件</li>
</ol>
<h3 id="2-2-操作文件的函数-x2F-方法"><a href="#2-2-操作文件的函数-x2F-方法" class="headerlink" title="2.2 操作文件的函数&#x2F;方法"></a>2.2 操作文件的函数&#x2F;方法</h3><ul>
<li>在 <code>Python</code> 中要操作文件需要记住 1 个函数和 3 个方法</li>
</ul>
<table>
<thead>
<tr>
<th align="left">序号</th>
<th align="left">函数&#x2F;方法</th>
<th align="left">说明</th>
</tr>
</thead>
<tbody><tr>
<td align="left">01</td>
<td align="left">open</td>
<td align="left">打开文件，并且返回文件操作对象</td>
</tr>
<tr>
<td align="left">02</td>
<td align="left">read</td>
<td align="left">将文件内容读取到内存</td>
</tr>
<tr>
<td align="left">03</td>
<td align="left">write</td>
<td align="left">将指定内容写入文件</td>
</tr>
<tr>
<td align="left">04</td>
<td align="left">close</td>
<td align="left">关闭文件</td>
</tr>
</tbody></table>
<ul>
<li><code>open</code> 函数负责打开文件，并且返回文件对象</li>
<li><code>read</code>&#x2F;<code>write</code>&#x2F;<code>close</code> 三个方法都需要通过 <strong>文件对象</strong> 来调用</li>
</ul>
<h3 id="2-3-read-方法-——-读取文件"><a href="#2-3-read-方法-——-读取文件" class="headerlink" title="2.3 read 方法 —— 读取文件"></a>2.3 read 方法 —— 读取文件</h3><ul>
<li>open函数的第一个参数是要打开的文件名（文件名区分大小写）<ul>
<li>如果文件 <strong>存在</strong>，返回 <strong>文件操作对象</strong></li>
<li>如果文件 <strong>不存在</strong>，会 <strong>抛出异常</strong></li>
</ul>
</li>
<li><code>read</code> 方法可以一次性 <strong>读入</strong> 并 <strong>返回</strong> 文件的 <strong>所有内容</strong></li>
<li>close方法负责关闭文件<ul>
<li>如果 <strong>忘记关闭文件</strong>，<strong>会造成系统资源消耗，而且会影响到后续对文件的访问</strong></li>
</ul>
</li>
<li><strong>注意</strong>：<code>read</code> 方法执行后，会把 <strong>文件指针</strong> 移动到 <strong>文件的末尾</strong></li>
</ul>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 1. 打开 - 文件名需要注意大小写</span></span><br><span class="line">file = <span class="built_in">open</span>(<span class="string">&quot;README&quot;</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 2. 读取</span></span><br><span class="line">text = file.read()</span><br><span class="line"><span class="built_in">print</span>(text)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 关闭</span></span><br><span class="line">file.close()</span><br></pre></td></tr></table></figure>

<p><strong>提示</strong></p>
<ul>
<li>在开发中，通常会先编写 <strong>打开</strong> 和 <strong>关闭</strong> 的代码，再编写中间针对文件的 <strong>读&#x2F;写</strong> 操作！</li>
</ul>
<h4 id="文件指针（知道）"><a href="#文件指针（知道）" class="headerlink" title="文件指针（知道）"></a>文件指针（知道）</h4><ul>
<li><strong>文件指针</strong> 标记 <strong>从哪个位置开始读取数据</strong></li>
<li><strong>第一次打开</strong> 文件时，通常 <strong>文件指针会指向文件的开始位置</strong></li>
<li>当执行了read方法后，文件指针会移动到读取内容的末尾<ul>
<li>默认情况下会移动到 <strong>文件末尾</strong></li>
</ul>
</li>
</ul>
<p><strong>思考</strong></p>
<ul>
<li>如果执行了一次 <code>read</code> 方法，读取了所有内容，那么再次调用 <code>read</code> 方法，还能够获得到内容吗？</li>
</ul>
<p><strong>答案</strong></p>
<ul>
<li>不能</li>
<li>第一次读取之后，文件指针移动到了文件末尾，再次调用不会读取到任何的内容</li>
</ul>
<h3 id="2-4-打开文件的方式"><a href="#2-4-打开文件的方式" class="headerlink" title="2.4 打开文件的方式"></a>2.4 打开文件的方式</h3><ul>
<li><code>open</code> 函数默认以 <strong>只读方式</strong> 打开文件，并且返回文件对象</li>
</ul>
<p>语法如下：</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">f = <span class="built_in">open</span>(<span class="string">&quot;文件名&quot;</span>, <span class="string">&quot;访问方式&quot;</span>)</span><br></pre></td></tr></table></figure>

<table>
<thead>
<tr>
<th align="center">访问方式</th>
<th align="left">说明</th>
</tr>
</thead>
<tbody><tr>
<td align="center">r</td>
<td align="left">以<strong>只读</strong>方式打开文件。文件的指针将会放在文件的开头，这是<strong>默认模式</strong>。如果文件不存在，抛出异常</td>
</tr>
<tr>
<td align="center">w</td>
<td align="left">以<strong>只写</strong>方式打开文件。如果文件存在会被覆盖。如果文件不存在，创建新文件</td>
</tr>
<tr>
<td align="center">a</td>
<td align="left">以<strong>追加</strong>方式打开文件。如果该文件已存在，文件指针将会放在文件的结尾。如果文件不存在，创建新文件进行写入</td>
</tr>
<tr>
<td align="center">r+</td>
<td align="left">以<strong>读写</strong>方式打开文件。文件的指针将会放在文件的开头。如果文件不存在，抛出异常</td>
</tr>
<tr>
<td align="center">w+</td>
<td align="left">以<strong>读写</strong>方式打开文件。如果文件存在会被覆盖。如果文件不存在，创建新文件</td>
</tr>
<tr>
<td align="center">a+</td>
<td align="left">以<strong>读写</strong>方式打开文件。如果该文件已存在，文件指针将会放在文件的结尾。如果文件不存在，创建新文件进行写入</td>
</tr>
</tbody></table>
<p><strong>提示</strong></p>
<ul>
<li>频繁的移动文件指针，<strong>会影响文件的读写效率</strong>，开发中更多的时候会以 <strong>只读</strong>、<strong>只写</strong> 的方式来操作文件</li>
</ul>
<p><strong>写入文件示例</strong></p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 打开文件</span></span><br><span class="line">f = <span class="built_in">open</span>(<span class="string">&quot;README&quot;</span>, <span class="string">&quot;w&quot;</span>)</span><br><span class="line"></span><br><span class="line">f.write(<span class="string">&quot;hello python！\n&quot;</span>)</span><br><span class="line">f.write(<span class="string">&quot;今天天气真好&quot;</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 关闭文件</span></span><br><span class="line">f.close()</span><br></pre></td></tr></table></figure>

<h3 id="2-5-按行读取文件内容"><a href="#2-5-按行读取文件内容" class="headerlink" title="2.5 按行读取文件内容"></a>2.5 按行读取文件内容</h3><ul>
<li><code>read</code> 方法默认会把文件的 <strong>所有内容</strong> <strong>一次性读取到内存</strong></li>
<li>如果文件太大，对内存的占用会非常严重</li>
</ul>
<h4 id="readline-方法"><a href="#readline-方法" class="headerlink" title="readline 方法"></a><code>readline</code> 方法</h4><ul>
<li><code>readline</code> 方法可以一次读取一行内容</li>
<li>方法执行后，会把 <strong>文件指针</strong> 移动到下一行，准备再次读取</li>
</ul>
<p><strong>读取大文件的正确姿势</strong></p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 打开文件</span></span><br><span class="line">file = <span class="built_in">open</span>(<span class="string">&quot;README&quot;</span>)</span><br><span class="line"></span><br><span class="line"><span class="keyword">while</span> <span class="literal">True</span>:</span><br><span class="line">    <span class="comment"># 读取一行内容</span></span><br><span class="line">    text = file.readline()</span><br><span class="line"></span><br><span class="line">    <span class="comment"># 判断是否读到内容</span></span><br><span class="line">    <span class="keyword">if</span> <span class="keyword">not</span> text:</span><br><span class="line">        <span class="keyword">break</span></span><br><span class="line"></span><br><span class="line">    <span class="comment"># 每读取一行的末尾已经有了一个 `\n`</span></span><br><span class="line">    <span class="built_in">print</span>(text, end=<span class="string">&quot;&quot;</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 关闭文件</span></span><br><span class="line">file.close()</span><br></pre></td></tr></table></figure>

<h3 id="2-6-文件读写案例-——-复制文件"><a href="#2-6-文件读写案例-——-复制文件" class="headerlink" title="2.6 文件读写案例 —— 复制文件"></a>2.6 文件读写案例 —— 复制文件</h3><p><strong>目标</strong></p>
<p>用代码的方式，来实现文件复制过程</p>
<p><img src="https://s2.loli.net/2022/03/20/Nd5fMrwv9upXzjY.png" alt="025_复制文件"></p>
<h4 id="小文件复制"><a href="#小文件复制" class="headerlink" title="小文件复制"></a>小文件复制</h4><ul>
<li>打开一个已有文件，读取完整内容，并写入到另外一个文件</li>
</ul>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 1. 打开文件</span></span><br><span class="line">file_read = <span class="built_in">open</span>(<span class="string">&quot;README&quot;</span>)</span><br><span class="line">file_write = <span class="built_in">open</span>(<span class="string">&quot;README[复件]&quot;</span>, <span class="string">&quot;w&quot;</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 2. 读取并写入文件</span></span><br><span class="line">text = file_read.read()</span><br><span class="line">file_write.write(text)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 关闭文件</span></span><br><span class="line">file_read.close()</span><br><span class="line">file_write.close()</span><br></pre></td></tr></table></figure>

<h4 id="大文件复制"><a href="#大文件复制" class="headerlink" title="大文件复制"></a>大文件复制</h4><ul>
<li>打开一个已有文件，逐行读取内容，并顺序写入到另外一个文件</li>
</ul>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 1. 打开文件</span></span><br><span class="line">file_read = <span class="built_in">open</span>(<span class="string">&quot;README&quot;</span>)</span><br><span class="line">file_write = <span class="built_in">open</span>(<span class="string">&quot;README[复件]&quot;</span>, <span class="string">&quot;w&quot;</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 2. 读取并写入文件</span></span><br><span class="line"><span class="keyword">while</span> <span class="literal">True</span>:</span><br><span class="line">    <span class="comment"># 每次读取一行</span></span><br><span class="line">    text = file_read.readline()</span><br><span class="line"></span><br><span class="line">    <span class="comment"># 判断是否读取到内容</span></span><br><span class="line">    <span class="keyword">if</span> <span class="keyword">not</span> text:</span><br><span class="line">        <span class="keyword">break</span></span><br><span class="line"></span><br><span class="line">    file_write.write(text)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 关闭文件</span></span><br><span class="line">file_read.close()</span><br><span class="line">file_write.close()</span><br></pre></td></tr></table></figure>

<h2 id="03-文件-x2F-目录的常用管理操作"><a href="#03-文件-x2F-目录的常用管理操作" class="headerlink" title="03. 文件&#x2F;目录的常用管理操作"></a>03. 文件&#x2F;目录的常用管理操作</h2><ul>
<li>在终<strong>端&#x2F;文件浏览器</strong>、 中可以执行常规的<strong>文件&#x2F;目录</strong>管理操作，例如：<ul>
<li>创建、重命名、删除、改变路径、查看目录内容、……</li>
</ul>
</li>
<li>在 <code>Python</code> 中，如果希望通过程序实现上述功能，需要导入 <code>os</code> 模块</li>
</ul>
<h3 id="文件操作"><a href="#文件操作" class="headerlink" title="文件操作"></a>文件操作</h3><table>
<thead>
<tr>
<th align="left">序号</th>
<th align="left">方法名</th>
<th align="left">说明</th>
<th align="left">示例</th>
</tr>
</thead>
<tbody><tr>
<td align="left">01</td>
<td align="left">rename</td>
<td align="left">重命名文件</td>
<td align="left"><code>os.rename(源文件名, 目标文件名)</code></td>
</tr>
<tr>
<td align="left">02</td>
<td align="left">remove</td>
<td align="left">删除文件</td>
<td align="left"><code>os.remove(文件名)</code></td>
</tr>
</tbody></table>
<h3 id="目录操作"><a href="#目录操作" class="headerlink" title="目录操作"></a>目录操作</h3><table>
<thead>
<tr>
<th align="left">序号</th>
<th align="left">方法名</th>
<th align="left">说明</th>
<th align="left">示例</th>
</tr>
</thead>
<tbody><tr>
<td align="left">01</td>
<td align="left">listdir</td>
<td align="left">目录列表</td>
<td align="left"><code>os.listdir(目录名)</code></td>
</tr>
<tr>
<td align="left">02</td>
<td align="left">mkdir</td>
<td align="left">创建目录</td>
<td align="left"><code>os.mkdir(目录名)</code></td>
</tr>
<tr>
<td align="left">03</td>
<td align="left">rmdir</td>
<td align="left">删除目录</td>
<td align="left"><code>os.rmdir(目录名)</code></td>
</tr>
<tr>
<td align="left">04</td>
<td align="left">getcwd</td>
<td align="left">获取当前目录</td>
<td align="left"><code>os.getcwd()</code></td>
</tr>
<tr>
<td align="left">05</td>
<td align="left">chdir</td>
<td align="left">修改工作目录</td>
<td align="left"><code>os.chdir(目标目录)</code></td>
</tr>
<tr>
<td align="left">06</td>
<td align="left">path.isdir</td>
<td align="left">判断是否是文件</td>
<td align="left"><code>os.path.isdir(文件路径)</code></td>
</tr>
</tbody></table>
<blockquote>
<p>提示：文件或者目录操作都支持 <strong>相对路径</strong> 和 <strong>绝对路径</strong></p>
</blockquote>
<h2 id="04-文本文件的编码格式（科普）"><a href="#04-文本文件的编码格式（科普）" class="headerlink" title="04. 文本文件的编码格式（科普）"></a>04. 文本文件的编码格式（科普）</h2><ul>
<li>文本文件存储的内容是基于 <strong>字符编码</strong> 的文件，常见的编码有 <code>ASCII</code> 编码，<code>UNICODE</code> 编码等</li>
</ul>
<blockquote>
<p>Python 2.x 默认使用 <code>ASCII</code> 编码格式<br>Python 3.x 默认使用 <code>UTF-8</code> 编码格式</p>
</blockquote>
<h3 id="4-1-ASCII-编码和-UNICODE-编码"><a href="#4-1-ASCII-编码和-UNICODE-编码" class="headerlink" title="4.1 ASCII 编码和 UNICODE 编码"></a>4.1 ASCII 编码和 UNICODE 编码</h3><h4 id="ASCII-编码"><a href="#ASCII-编码" class="headerlink" title="ASCII 编码"></a><code>ASCII</code> 编码</h4><ul>
<li>计算机中只有 <code>256</code> 个 <code>ASCII</code> 字符</li>
<li>一个ASCII在内存中占用1 个字节的空间<ul>
<li><code>8</code> 个 <code>0/1</code> 的排列组合方式一共有 <code>256</code> 种，也就是 <code>2 ** 8</code></li>
</ul>
</li>
</ul>
<p><img src="https://s2.loli.net/2022/03/20/zbBYtmPlOginUvV.jpg" alt="001_ASCII编码表1"></p>
<h4 id="UTF-8-编码格式"><a href="#UTF-8-编码格式" class="headerlink" title="UTF-8 编码格式"></a><code>UTF-8</code> 编码格式</h4><ul>
<li>计算机中使用 <strong>1~6 个字节</strong> 来表示一个 <code>UTF-8</code> 字符，涵盖了 <strong>地球上几乎所有地区的文字</strong></li>
<li>大多数汉字会使用 <strong>3 个字节</strong> 表示</li>
<li><code>UTF-8</code> 是 <code>UNICODE</code> 编码的一种编码格式</li>
</ul>
<h3 id="4-2-Ptyhon-2-x-中如何使用中文"><a href="#4-2-Ptyhon-2-x-中如何使用中文" class="headerlink" title="4.2 Ptyhon 2.x 中如何使用中文"></a>4.2 Ptyhon 2.x 中如何使用中文</h3><blockquote>
<p>Python 2.x 默认使用 <code>ASCII</code> 编码格式<br>Python 3.x 默认使用 <code>UTF-8</code> 编码格式</p>
</blockquote>
<ul>
<li>在 Python 2.x 文件的 <strong>第一行</strong> 增加以下代码，解释器会以 <code>utf-8</code> 编码来处理 python 文件</li>
</ul>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># *-* coding:utf8 *-*</span></span><br></pre></td></tr></table></figure>

<blockquote>
<p>这方式是官方推荐使用的！</p>
</blockquote>
<ul>
<li>也可以使用</li>
</ul>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># coding=utf8</span></span><br></pre></td></tr></table></figure>

<h4 id="unicode-字符串"><a href="#unicode-字符串" class="headerlink" title="unicode 字符串"></a>unicode 字符串</h4><ul>
<li>在 <code>Python 2.x</code> 中，即使指定了文件使用 <code>UTF-8</code> 的编码格式，但是在遍历字符串时，仍然会 <strong>以字节为单位遍历</strong> 字符串</li>
<li>要能够 <strong>正确的遍历字符串</strong>，在定义字符串时，需要 <strong>在字符串的引号前</strong>，增加一个小写字母 <code>u</code>，告诉解释器这是一个 <code>unicode</code> 字符串（使用 <code>UTF-8</code> 编码格式的字符串）</li>
</ul>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># *-* coding:utf8 *-*</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 在字符串前，增加一个 `u` 表示这个字符串是一个 utf8 字符串</span></span><br><span class="line">hello_str = <span class="string">u&quot;你好世界&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">print</span>(hello_str)</span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span> c <span class="keyword">in</span> hello_str:</span><br><span class="line">    <span class="built_in">print</span>(c)</span><br></pre></td></tr></table></figure>
            <!--[if lt IE 9]><script>document.createElement('audio');</script><![endif]-->
            <audio id="audio" loop="1" preload="auto" controls="controls" data-autoplay="false">
                <source type="audio/mpeg" src="">
            </audio>
            
                <ul id="audio-list" style="display:none">
                    
                        
                            <li title="0" data-url="http://link.hhtjim.com/163/425570952.mp3"></li>
                        
                    
                        
                            <li title="1" data-url="http://link.hhtjim.com/163/425570952.mp3"></li>
                        
                    
                </ul>
            
        </div>
        
        
    <div id="gitalk-container" class="comment link"
		data-enable="false"
        data-ae="false"
        data-ci=""
        data-cs=""
        data-r=""
        data-o=""
        data-a=""
        data-d="false"
    >查看评论</div>


    </div>
    
</div>


    </div>
</div>
</body>


<script src="//lib.baomitu.com/jquery/1.8.3/jquery.min.js"></script>
<script src="/js/plugin.js"></script>
<script src="/js/typed.js"></script>
<script src="/js/diaspora.js"></script>


<link rel="stylesheet" href="/photoswipe/photoswipe.css">
<link rel="stylesheet" href="/photoswipe/default-skin/default-skin.css">


<script src="/photoswipe/photoswipe.min.js"></script>
<script src="/photoswipe/photoswipe-ui-default.min.js"></script>


<!-- Root element of PhotoSwipe. Must have class pswp. -->
<div class="pswp" tabindex="-1" role="dialog" aria-hidden="true">
    <!-- Background of PhotoSwipe. 
         It's a separate element as animating opacity is faster than rgba(). -->
    <div class="pswp__bg"></div>
    <!-- Slides wrapper with overflow:hidden. -->
    <div class="pswp__scroll-wrap">
        <!-- Container that holds slides. 
            PhotoSwipe keeps only 3 of them in the DOM to save memory.
            Don't modify these 3 pswp__item elements, data is added later on. -->
        <div class="pswp__container">
            <div class="pswp__item"></div>
            <div class="pswp__item"></div>
            <div class="pswp__item"></div>
        </div>
        <!-- Default (PhotoSwipeUI_Default) interface on top of sliding area. Can be changed. -->
        <div class="pswp__ui pswp__ui--hidden">
            <div class="pswp__top-bar">
                <!--  Controls are self-explanatory. Order can be changed. -->
                <div class="pswp__counter"></div>
                <button class="pswp__button pswp__button--close" title="Close (Esc)"></button>
                <button class="pswp__button pswp__button--share" title="Share"></button>
                <button class="pswp__button pswp__button--fs" title="Toggle fullscreen"></button>
                <button class="pswp__button pswp__button--zoom" title="Zoom in/out"></button>
                <!-- Preloader demo http://codepen.io/dimsemenov/pen/yyBWoR -->
                <!-- element will get class pswp__preloader--active when preloader is running -->
                <div class="pswp__preloader">
                    <div class="pswp__preloader__icn">
                      <div class="pswp__preloader__cut">
                        <div class="pswp__preloader__donut"></div>
                      </div>
                    </div>
                </div>
            </div>
            <div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap">
                <div class="pswp__share-tooltip"></div> 
            </div>
            <button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)">
            </button>
            <button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)">
            </button>
            <div class="pswp__caption">
                <div class="pswp__caption__center"></div>
            </div>
        </div>
    </div>
</div>






</html>
